package day08;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class MathTest {
    public static void main(String[] args) {
        //1. 指定范围随机数
        int num = getRandomNumber(3);
        System.out.println("随机数"+num);
        // 2 指定长度的数组，赋值范围50内
       int[] arr =  getArray(9);
       System.out.println(Arrays.toString(arr));
       //3 指定长度 ，指定赋值范围
       int[] arr1= getRandomArray(10,2);
        System.out.println(Arrays.toString(arr1));
        // 4 猜数字游戏
        Scanner scanner = new Scanner(System.in);
        int randomNum = getRandomNumber(100);// 调用第一题的随机数方法，指定了100的范围
        while (true){
            System.out.println("请输入你猜的数字");
            int inputNum = scanner.nextInt();
            if (inputNum == -1){
                System.out.println("游戏结束");
                break;
            }
            guess(inputNum,randomNum);// 猜的事情 方法已经封装了，反复调用即可

            if (randomNum == inputNum){
                break;
            }
        }
        // 4 第二种实现方式
        guess2();
        // 5 成绩等级
        while (true){
            Scanner input = new Scanner(System.in);
            System.out.println("请输入成绩1-100");
            int score = input.nextInt();
            if (score == -1){
                System.out.println("退成等级评定");
                break;
            }
            leven(score);
        }

        // 6 打折
        while (true) {
            Scanner input2= new Scanner(System.in);
            System.out.println("请输入消费金额");
            double price = input2.nextDouble();
            if (price<0){
                System.out.println("退成打折系统");
                break;
            }
            price(price);
        }
        //7 atm
        atm(2);
        //jc
        jc();
        // 数组排序
        int[] arr2= {98,34,56,1,3,5,4};
        buble(arr2);
        int[] arr3= {100,74,26,51,30,11,14};
        int[] arr4 = buble2(arr3);
        System.out.println(Arrays.toString(arr4));
        // 调用方法
        print();

    }
    // 封装一个给定范围的随机数方法，并返回
    public static int getRandomNumber(int range) {
        Random rand = new Random();
       /* int i  = rand.nextInt(range);
        return i;*/
        return rand.nextInt(range);
    }
    // 封装一个生成指定定长度的数组，并且随机50以内数给赋值，并返回
    public static int[] getArray(int length){
        int[] arr = new int[length];
        for (int i=0;i<length;i++){
            arr[i] = getRandomNumber(50);
        }
        return arr;
    }
    // 封装一个生成指定长度的数组，并且给指定随机范围数，生成数组赋值后返回
    public static int[] getRandomArray(int length,int range){
        int[] arr = new int[length];
        Random rand = new Random();
        for (int i = 0; i < length; i++){
            arr[i]= rand.nextInt(range);
        }
        return arr;
    }

    // 封装一个方法，完成反复猜数字游戏，-1退出不玩了
    public static void guess(int inputNum,int num){
        if(inputNum==num){
            System.out.println("猜对了。");
        } else if (inputNum>num) {
            System.out.println("猜大了。");
        } else if (inputNum<num) {
            System.out.println("猜小了！！！");
        }
    }
    public static void guess2(){
        Scanner scanner = new Scanner(System.in);
        int randomNum = getRandomNumber(100);// 调用第一题的随机数方法，指定了100的范围
        while (true){
            System.out.println("请输入你猜的数字");
            int inNum = scanner.nextInt();
            if (inNum == -1){
                System.out.println("游戏结束");
                break;
            }
            if(inNum==randomNum){
                System.out.println("猜对了。");
                return;
            } else if (inNum>randomNum) {
                System.out.println("猜大了。");
            } else if (inNum<randomNum) {
                System.out.println("猜小了！！！");
            }
        }
    }

    // 将成绩等级进行封装成一个方法，给定一个成绩。判断等级输出
    public static void leven(int score){
       if (score<0||score>100){
           System.out.println("成绩格式不正确");
           return;
       }
        if (score >= 90){
            System.out.println("优秀");
        }else if (score >= 80){
            System.out.println("良好");
        }else if (score >= 70){
            System.out.println("中等");
        } else if (score>=60) {
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }
    }
    // 将超市打折进行封装一个方法，给定一个价格，判断打折后的消费金额输出
    public static void price (double price){

        if (price>5000){
            price *=0.7;
        } else if (price>4000) {
            price *=0.8;
        } else if (price>3000) {
            price *=0.9;
        }else {
            price=price;
        }
        System.out.println("打折后消费金额："+price);

    }
    // 封装一个方法，模拟ATM系统，可以反复输入一个值 进入不同功能，输入-1退出
    public static void atm(int num){
        switch (num){
            case 1:
                System.out.println("进入取款模式");
                break;
            case 2:
                System.out.println("进入查询模式");
                break;
            case 3:
                System.out.println("进入存款模式");
                break;
            default:
                System.out.println("退卡");

        }
    }

    // 封装一个方法，将10的阶乘计算输出
    public static void jc(){
        int total=1;
        for (int i = 1; i <=10; i++) {
            total *=i;
        }
        System.out.println("10!="+total);
    }

    // 封装一个方法，对数组进行冒泡排序 [3,2,1]
    public  static void buble(int[] arr){
        for (int i=0;i<arr.length;i++){
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
        }

        System.out.println("数组排序"+Arrays.toString(arr));
    }
    public  static int[] buble2(int[] arr){
        for (int i=0;i<arr.length;i++){
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
        }

        return arr;
    }
    // 调用生成数组的方法（第三个题），三次，给这三次的数组调用冒泡排序方法进行排序，然后输出排序结果
    public static void print(){
       int[] arr1= getRandomArray(4,200);
       int[] arr2 = getRandomArray(5,500);
       int[] arr3 = getRandomArray(10,1000);

       buble(arr1);
       buble(arr2);
       buble(arr3);
    }

}
